<?php
namespace app\admin\model;
use think\Model;
use think\Db;
use think\Exception;
use think\facade\Config;
use app\admin\model\AdminGroupAccess as Access;
use app\admin\model\AdminGroup as Group;
class AdminUser extends Model
{
	// 写入模型名称 可以是当前或者别的
	protected $name='AdminUser';

	// 设置主键
	protected $pk = 'id';
 
	// 设置对应字段
	protected $field=[ 'id','group_id','username','password','name','phone','email','status','up_time','add_time', ];

	// 类型转换 进入数据库时候的类型转换
	protected $type=
	[
		'id'=>'interger',
		'group_id'=>'interger',
		'username'=>'string',
		'password'=>'string',
		'name'=>'string',
		'phone'=>'string',
		'email'=>'string',
		'status'=>'interger',
		'up_time'=>'interger',
		'add_time'=>'interger',
	];

	// 设置新增插入时的默认值，既没有这些数据被输入时候，以下内容依然会被执行
	public $insert=
	[
		// 设置真实姓名
		'name'=>'未设置',
		// 设置电话
		'phone'=>'未设置',
		// 设置邮件
		'email'=>'未设置',
		// 设置新增时间
		'add_time'=>$_SERVER['REQUEST_TIME'],
		// 设置更新时间
		'up_time' => $_SERVER['REQUEST_TIME'],
		// 设置状态默认情况 1 开启规则 0禁用操作 3软删除规则
		'status' => 1,
		// 对规则进行描述
		'note' =>'该用户暂时没有说明',
	];

	//当更新时 那些字段默认直接更新
	public $update=
	[
		// 设置更新时间
		'up_time' => $_SERVER['REQUEST_TIME'],
	];
	
	// 写入后不可更改的数据
	protected $readonly = ['id','add_time'];
	
	//在子类重写父类的初始化方法initialize()
	protected function initialize()
	{
		parent::initialize();
	}

	protected static function init()
	{

	}

	/**
	 * userList 获取用户数据
	 * @return null 为空时返回
	 * @return array 返回数据信息
	 */
	public function userList()
	{
		// 获取用户列表
		$data = $this->comment('查询用户列表数据内容')->where('status','neq',3)->paginate(5);
		// 判断数据是否为空 如果为空返回空
		if (empty($data)) return null;
		// 返回数据信息
		return $data;
	}

	/**
	 * groupUser 权限组查询
	 * @return null 为空时返回
	 * @return array 返回数据信息
	 */
	public function groupUser()
	{
		// 获取权限组内容数据
		$data = Group::comment('查询权限规则数据内容')->where('status','neq',3)
			->field('id,title')->select()->toArray();
		// 判断数据是否为空 如果为空返回空
		if (empty($data)) return null;
		// 返回数据信息
		return $data;
	}

	/**
	 * userGet 获取详情信息
	 * @param  int $id 权限组id
	 * @return null 为空时返回
	 * @return array 返回数据信息
	 */
	public function userGet($id)
	{
		// 获取单条数据记录
		$data = $this->comment('查询id为'.$id.'的数据内容')->where('id','eq',$id)
		->select()->toArray();
		// 判断数据是否为空 如果为空返回空
		if (empty($data)) return null;
		// 返回数据信息
		return $data;
	}

	/**
	 * userAdd 用户添加操作
	 * @param  array $data 用户数据
	 * @return bool    返回操作是否成功
	 */
	public function userAdd($data)
	{
		// 开启事务
		Db::startTrans();
		try
		{
			$res1 = $this->comment('用户为'.$data['username'].'的用户添加操作')->insert($data);
			$res2 = Access::comment('用户组管理'.$data['username'].'的权限组添加操作')->insert(['user_id'=>$this->id,'group_id'=>$data['group_id']]);
			// 事务提交
			Db::commit();
			// 返回结果判断
			return true;
		}
		catch (\Exception $e)
		{
			// 事务回滚
			Db::rollback();
			// 抛出错误异常
			throw new Exception($e->getMessage());
			// 返回结果判断
			return false;
		}
	}
	
	/**
	 * userEdit 用户编辑操作
	 * @param  int $id 用户id
	 * @param  array $data 用户数据
	 * @return bool    返回操作是否成功
	 */
	public function userEdit($id,$data)
	{
		// 开启事务
		Db::startTrans();
		try
		{
			$res1 = $this->comment('id为'.$id.'的用户编辑操作')->where('id', '=', $id)->update($data);
			$res2 = Access::where('user_id', '=', $id)->update(['group_id'=>$data['group_id']]);
			// 事务提交
			Db::commit();
			// 返回结果判断
			return true;
		}
		catch (\Exception $e)
		{
			// 事务回滚
			Db::rollback();
			// 抛出错误异常
			throw new Exception($e->getMessage());
			// 返回结果判断
			return false;
		}
	}

	

	public function userDel($id)
	{
		try
		{
			// 进行数据操作
			$res = $this->comment('id为'.$id.'的用户删除操作')->where('id','eq',$id)->update(['status'=>3]);
			// 返回结果判断
			return true;
		}
		catch (\Exception $e)
		{
			// 抛出错误信息
			throw new Exception($e->getMessage());
			// 返回结果判断
			return false;
		}
	}
}
